package com.nuc.bigdata.api.controller;

import com.nuc.bigdata.annotation.ResponseResult;
import com.nuc.bigdata.app.service.PhotoService;
import com.nuc.bigdata.feign.dto.NewsCommentsDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * 图片资讯controller，与前端交互
 * @author JackLuo
 * @date 2019/11/26
 */
@RestController
@RequestMapping("/front")
@CrossOrigin
public class PhotoController {

    private final PhotoService photoService;

    @Autowired
    PhotoController(PhotoService photoService) {
        this.photoService = photoService;
    }

    /**
     * 获取所有图片资讯的菜单
     * @return 这里经过ResponseResult注解包装，返回的是Result类型，为了能兼容Service返回类型，就使用了Object类型
     */
    @GetMapping("/photos/menu")
    @ResponseResult
    public Object listAllMenu() {
        return photoService.listAllMenu();
    }


    /**
     * 获取指定菜单下的所有图片资讯
     * @param menuId 菜单唯一标识
     * @return 这里经过ResponseResult注解包装，返回的是Result类型，为了能兼容Service返回类型，就使用了Object类型
     */
    @GetMapping("/photos/news/menu/{menuId}")
    @ResponseResult
    public Object listByMenuId(@PathVariable("menuId") String menuId) {
        return photoService.listByMenuId(menuId);
    }

    /**
     * 获取所有图片资讯
     * @return 这里经过ResponseResult注解包装，返回的是Result类型，为了能兼容Service返回类型，就使用了Object类型
     */
    @GetMapping("/photos/news")
    @ResponseResult
    public Object listNews() {
        return photoService.listNews();
    }

    /**
     * 获取指定图片资讯id的图片资讯
     * @param pnId 图片资讯唯一标识
     * @return 这里经过ResponseResult注解包装，返回的是Result类型，为了能兼容Service返回类型，就使用了Object类型
     */
    @GetMapping("/photos/news/{pnId}")
    @ResponseResult
    public Object queryByPnId(@PathVariable("pnId") String pnId) {
        return photoService.queryByPnId(pnId);
    }

    /**
     * 获取指定图片资讯id的评论
     * @param pnId 图片资讯唯一标识
     * @param pageSize 页码
     * @return 这里经过ResponseResult注解包装，返回的是Result类型，为了能兼容Service返回类型，就使用了Object类型
     */
    @GetMapping("/photos/news/{pnId}/comments")
    @ResponseResult
    public Object listCommentByPnId(@PathVariable("pnId") String pnId,
                                    @RequestParam("pageSize") Long pageSize) {
        return photoService.listCommentsByPnId(pnId, pageSize);
    }

    /**
     * 提交新评论
     * @param pnId 图片资讯唯一标识
     * @param commentsDto 评论内容Dto，包含userId和content
     * @return 这里经过ResponseResult注解包装，返回的是Result类型，为了能兼容Service返回类型，就使用了Object类型
     */
    @PostMapping("/photos/news/{pnId}/comment")
    @ResponseResult
    public Object createComment(@PathVariable("pnId")String pnId,
                                NewsCommentsDto commentsDto){
        photoService.createComment(pnId, commentsDto);
        return null;
    }

    /**
     * 用户点赞评论
     * @param photoCommentId 图片资讯评论唯一标识
     * @param userId 用户唯一标识
     * @return 这里经过ResponseResult注解包装，返回的是Result类型，为了能兼容Service返回类型，就使用了Object类型
     */
    @PostMapping("/photos/news/{pnId}/comments/{photoCommentId}/like")
    @ResponseResult
    public Object toCommentLike(@PathVariable("photoCommentId")String photoCommentId,
                                String userId){
        photoService.toCommentsLike(userId,photoCommentId );
        return null;
    }
}
